//class Solution692_2
//{
//    private Map<String, Integer> map = new HashMap<>();
//    private Set<String> set = new HashSet<>();
//    private List<String> list = new ArrayList<>();
//    private  PriorityQueue<String> queue = new PriorityQueue<String>(
//        (o1 , o2)->{
//           Integer a = map.get(o1) ;
//           Integer b = map.get(o2) ;
//           if(a.equals(b)){
//               return o2.compareTo(o1) ;
//           }else{
//              return a.compareTo(b) ;
//           }
//        }
//    );
//
//    public List<String> topKFrequent(String[] words, int k) {
//        for(String str : words){
//            map.put(str , map.getOrDefault(str , 0)+1) ;
//            set.add(str) ;
//        }
//
//        for(String str : words){
//            if(queue.size() < k && set.contains(str)){
//              queue.offer(str) ;
//           set.remove(str) ;
//
//            }else if(set.contains(str)){
//               Integer a = map.get(str) ;
//               Integer b = map.get(queue.peek()) ;
//               if(a > b){
//                queue.poll() ;
//                queue.offer(str) ;
//               }else if(a.equals(b)){
//                 if(str.compareTo(queue.peek()) <0){
//                    queue.poll() ;
//                queue.offer(str) ;
//                 }
//               }
//             set.remove(str) ;
//            }
//        }
//        while(!queue.isEmpty()){
//            list.add(queue.poll());
//        }
//         Collections.reverse(list) ;
//         return list ;
//    }
//}